package com.lfd.controller;

import java.io.File;
import javax.servlet.http.HttpServletRequest;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import com.lfd.service.ProductService;
import com.lfd.util.Result;
@Controller
@RequestMapping("/file")
public class FileController {

	private Logger logger = Logger.getLogger(FileController.class);
	
	@Autowired
	private ProductService productService;
	
	/**
	 * 图片上传
	 * @param request
	 * @param multipartFile
	 * @param path
	 * @return
	 */
	@RequestMapping("/image")
	@ResponseBody
	public Result imageUpload(HttpServletRequest request,@RequestParam("file")MultipartFile multipartFile, @RequestParam(name = "path",required = false) String path) {
		try {
			//默认图片放到images目录下面
			path = ( path ==  null ? "images" : path );
			if (multipartFile != null) {// 判断上传的文件是否为空
				String type = null;// 文件类型
				String fileName = multipartFile.getOriginalFilename();// 文件原名称
				logger.error("上传的文件原名称:" + fileName);
				// 根据后缀名判断文件类型
				type = fileName.indexOf(".") != -1 ? 
					   fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length())
						: null;
				if (type != null) {// 判断文件类型是否为空
					if ("GIF".equals(type.toUpperCase()) || "PNG".equals(type.toUpperCase())
							|| "JPG".equals(type.toUpperCase())) {
						// 项目在容器中实际发布运行的根路径
						String fileSpe = System.getProperty("file.separator");
						String rootPath = request.getServletContext().getRealPath(fileSpe);
						// 自定义的文件名称
						String trueFileName = String.valueOf(System.currentTimeMillis()) + fileName;
						// 设置存放图片文件的路径  abPath相对路径，存放到数据库 
						//  targetPath在服务器上的真实路径
						String abPath = fileSpe + path +fileSpe + trueFileName;
						String targetPath = rootPath + abPath;
						logger.error("运行时实际存放图片文件的路径:" + targetPath);
						// 转存文件到指定的路径
						multipartFile.transferTo(new File(targetPath));
						logger.error("文件成功上传到指定目录下");
						//返回前端图片的相对路径
						return new Result("0", "图片上传成功",1,abPath);
					} else {
						logger.error("不是我们想要的文件类型,请按要求重新上传");
						return new Result("1","不是我们想要的文件类型,请按要求重新上传");
					}
				} else {
					logger.error("文件类型为空");
					return new Result("1","文件类型为空");
				}
			} else {
				logger.error("没有找到相对应的文件");
				 return new Result("1","没有找到相对应的文件");
			}
		} catch (Exception  e) {
			logger.error("文件上传失败",e);
			return new Result("1","服务器忙,图片上传失败");
		}
	}
}
